package com.wsp.service.mapper;

import com.wsp.apimanagement.pojo.entity.Comment;
import com.wsp.apimanagement.pojo.entity.Like;
import com.wsp.apimanagement.pojo.entity.Record;
import com.wsp.apimanagement.pojo.vo.ModuleRecord;
import com.wsp.apimanagement.pojo.vo.RecordInfo;
import com.wsp.apimanagement.pojo.vo.UserCommentInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Package: com.wsp.service.mapper
 * Description： TODO
 *
 * @Author: 巫思平
 * Copyright: Copyright (c) 2020
 * Version: 1
 */
@Mapper
@Repository
public interface RecordMapper {

    /**
     * 获取说说的详情
     * @param recordId id
     * @return 详情
     */
    Record getRecordById(long recordId);

    /**
     * 获取打卡记录
     * @param userId 用户id
     * @param moduleId 圈子id
     * @param nowRow 当前页码
     * @param size 获取数量
     * @return 打卡记录
     */
    List<Record>  getRecordListByUserId(long userId, long moduleId, int nowRow, int size);

    /**
     * 插入打卡记录
     * @param record 打卡记录
     * @return 结果
     */
    int insertRecord(Record record);

    /**
     * 获取评论
     * @param recordId 说说id
     * @param parentCommentId 父评论id
     * @return 结果
     */
    List<UserCommentInfo> getCommentList(long recordId, long parentCommentId);

    /**
     * 发表评论
     * @param comment 评论信息
     * @return 结果
     */
    int insertComment(Comment comment);

    /**
     * 获取说说点赞人
     * @param recordId 说说id
     * @return 结果
     */
    List<Like> getRecordTotalLike(long recordId);


    /**
     * 获取某人是否点赞
     * @param userId 用户id
     * @param recordId 说说id
     * @return 结果
     */
    int getUserHasLike(long userId, long recordId);

    /**
     * 批量更新（模拟事件提交）
     * @param recordId 说说id
     * @param UserAndTime 点赞用户和事件
     * @return 结果
     */
    int insertLikesBatch(long recordId, @Param("userAndTIme") Map<Long, Long> UserAndTime);

    /**
     * 更新点赞数
     * @param recordId 点赞
     * @param num 数量
     * @return
     */
    int updateTotalLike(long recordId, int num);

    /**
     * 删除过期（模拟事件提交）
     * @param recordId 说说id
     * @param olderUser 待删除点赞用户
     * @return 结果
     */
    int deleteLike(long recordId, @Param("olderUser") Set<Object> olderUser);
}
